#define _CRT_SECURE_NO_WARNINGS 1

#include<stdio.h>
#include<math.h>
#include<assert.h>
#include<stdlib.h>

//int main()
//{
//	int a, b, n;
//	scanf("%d%d%d", &a, &b,&n);
//	int count = 0;
//	int day = 0;
//	while (count < n)
//	{
//		if (day % 7 < 5)
//		{
//			count += a;
//		}
//		else
//		{
//			count += b;
//		}
//		day++;
//	}
//	printf("%d ", day);
//	return 0;
//}


//int main()
//{
//	int lena, lenb, n;
//	scanf("%d%d", &n, &lena);
//	int a[100001] = { 0 };
//	for (int i = 0; i < lena; i++)
//	{
//		scanf("%d", &a[i]);
//	}
//	scanf("%d", &lenb);
//	int b[100001] = { 0 };
//	for (int i = 0; i < lenb; i++)
//	{
//		scanf("%d", &b[i]);
//	}
//	int max = 1;
//	int i = lena-1;
//	int counta = 0;
//	int countb = 0;
//	int rank = 1;
//	while (i >= 0)
//	{
//		rank *= max;
//		counta += a[i] * rank;
//		countb += b[i] * rank;
//		max = (a[i] > b[i] ? a[i] : b[i]) + 1;
//		if (max < 2)
//		{
//			max = 2;
//		}
//		if (max > n)
//		{
//			max = n;
//		}
//		i--;
//	}
//	printf("%d ", counta - countb);
//	return 0;
//}


//typedef struct {
//    int* arr;
//} NumArray;
//
//
//NumArray* numArrayCreate(int* nums, int numsSize) {
//    NumArray* S = malloc(sizeof(NumArray));
//    int* narr = (int*)malloc(sizeof(int) * (numsSize + 1));
//    if (narr == NULL)
//    {
//        perror(malloc);
//        exit(-1);
//    }
//    S->arr = narr;
//    S->arr[0] = 0;
//    for (int i = 0; i < numsSize; i++)
//    {
//        S->arr[i+1] = nums[i] + S->arr[i];
//    }
//    return S;
//}
//
//int numArraySumRange(NumArray* obj, int left, int right) {
//    assert(obj);
//
//    return obj->arr[right + 1] - obj->arr[left];
//}
//
//void numArrayFree(NumArray* obj) {
//    assert(obj);
//
//    free(obj->arr);
//}
//
//
//int main()
//{
//    int arr[] = { -2,0,3,-5,2,-1 };
//    int sz = sizeof(arr) / sizeof(arr[0]);
//    NumArray* S = numArrayCreate(arr, sz);
//    printf("%d ",numArraySumRange(S, 0, 2));
//    printf("%d ", numArraySumRange(S, 2, 5));
//    printf("%d ", numArraySumRange(S, 0, 5));
//
//    return 0;
//}


//bool isUnivalTree(struct TreeNode* root) {
//	if (root == NULL)
//	{
//		return true;
//	}
//
//	if (root->left)
//	{
//		if (root->val != root->left->val || !isUnivalTree(root->left))
//		{
//			return false;
//		}
//	}
//	if (root->right)
//	{
//		if (root->val != root->right->val || !isUnivalTree(root->right))
//		{
//			return false;
//		}
//	}
//	return true;
//}


bool isUnivalTree(struct TreeNode* root) {
	if (root == NULL)
	{
		return true;
	}
	if (root->left && root->val != root->left->val)
	{
			return false;
	}

	if (root->right && root->val != root->right->val)
	{
		return false;
	}
	return isUnivalTree(root->left) && isUnivalTree(root->right);
}